Replication of: Carbon Taxes Around the World: Cooperation, Strategic Interactions, and Spillovers"

By Alessandro Moro and Valerio Nispi Landi

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
LIST OF FILES

m files
- console: computes the initial steady state
- console_final_opt: computes the final steady state
- load_sim: load inputs necessary for Table 4
- optimal_tax: computes reaction functions and equilibria
- optimal_tax_digamma: simulation to save the IRFs for Figure 4
- plot base: plots Figure 2
- plot_equ: plots Figure 4
- plot reaction: plots the reaction functions
- plot_trans: plots the IRFs
- saving_path0: saves the IRFs under the baseline policy
- saving_path1: saves the IRFs when AE conducts an optimal policy
- saving_path2: saves the IRFs under the Nash equilibrium
- simple_model: simulates the small model
- simul_transition: simulates the IRFs and then calls plot trans


m functions
- find_opt_tax: finds the optimal tax in the small model
- find_steady: is called by console to compute the initial steady state
- find_steady_final: is called by console_finale_opt to compute the final steady state

mod files
- climate: the model file

par files
- dice: time series for environmental variables taken from the DICE excel file. The only relevant for the paper is the second one (atm. carbon in the DICE model, baseline scenario), which is plotted in Figure 2.
sim_psi0, sim_psi05, sim_psi1: produced by optimal_tax, they contain all the information necessary to plot Figure 3,4 and Table 4
- gdpW_sym: needed to compute the steady state when countries are symmetric


xlsx file
- DICE Projections: dowloaded in May 2023 from https://yale.app.box.com/s/whlqcr7gtzdm4nxnrfhvap2hlzebuvvm/folder/196571686525
In the sheet "To be imported", there are a list of time series, taken from the sheet "DICE 2023", either for the DICE baseline scenario or for the DICE optimal policy. These series are saved in the par file "dice".

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
FIGURE 1 (reaction function in the small model) and Table 1
A)
- In simple_model.m set:

UT=0;

- Run simple_model.m

Matlab prints the 1st row of Table 1
  

B) Changes with respect to A:
- In simple_model.m set:

UT=1;

gamma1=gamma;
gamma2=0;

- Run simple_model.m      

Matlab prints the 2nd row of Table 1     

C) Changes with respect to B

- In simple_model.m set:

UT=1;

gamma1=0;
gamma2=gamma/S;

- Run simple_model.m    

Matlab prints the 3rd row of Table 1    

D) - In simple_model.m set:

UT=1;

gamma2=2*gamma/S;

- Run simple_model.m     

Matlab prints the 4th row of Table 1 and plots Figure 1   


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
FIGURE 2 (Atmospheric carbon in our model and DICE)

A)

- In console.m

SIMUL=0;
SYM=0;

- In climate.mod:

LIN=0;   
DAM=0;      
LOOP=0;       

- Run plot_base

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
FIGURE 3,4 and Table 4 (reaction functions, NE, CE)
Note: each optimal_tax runs in about 2 hours in our laptops.
A)
- In climate.mod:

LIN=0;
DAM=0;      
LOOP=1;

- In console.m
SIMUL=0;
psiX=0;

- In optimal_tax.m

RUN=1;

- Run optimal_tax

Matlab prints the 1st row of Table 4

B) Changes with respect to A:

- In console.m
psiX=0.5;

- Run optimal_tax

Matlab prints the 2nd row of Table 4


C) Changes with respect to B:

- In console.m
psiX=1;

- Run optimal_tax.m

Matlab prints the 3rd row of Table 4

- Run plot_reaction.m to get Figure 3 using:

PAPER=1;     
SYM=0;
LIN=0;

- Run optimal_tax_digamma to save IRFs useful for Figure 4 (remember LOOP=0 in the mod file)
- Run plot_equ.m to get Figure 4

ALTERNATIVE TO SAVE TIME

To save time, if you do not want to run new simulations but you want just to plot figures, do the following.

- Go in Valerio's website https://sites.google.com/site/valerionispi/research
- Open the replication code related to this publication
- You can find a folder called "Storage"
- Copy in the main folder the three par files contained in one of the five subfolders in "Storage" (choose the one necessary for your simulation, in this case it's "baseline")

- In optimal_tax:
RUN=0;

- In console, change the value of psiX.

- Run optimal_tax and repeat the steps of the previous point (optimal_tax_digamma and plot_equ): you will get the same outcome of the previous point, without waiting for 2 hours.


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
FIGURE 5-6 (Transition, all variables)

- In plot_trans.m

PAPER=1;

- In climate.mod
LIN=0;        
DAM=0;        
LOOP=0;       

- In simul transition.m set:

LIN=0;
DAM=0;

- Run simul_transition.m

NOTE: How did we find digamma=0.0067, i.e. the response of AE to EME baseline policy?
- Run console, under SIMUL==1 and psiX=1;
- BASE=2; in the command window
- In climate.mod
LOOP=1;
Set DGZ=0; (line 28)
It takes a couple of minutes, then the value will show in the command window

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
FIGURE 7 (Transition, Nash equilibrium)

- In plot_trans.m

PAPER=1;

- Run simul_transition.m


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Table D1 (Heterogeneous abatement)

- Repeat the steps in Table 4, setting in console.m 

eme_factor_ab=1.89;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Table D2 (Heterogeneous disutility)

- Repeat the steps in Table 4, setting in console.m:

eme_factor_dis=2;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Table D3 and Figures D1-D2 (Linear taxes)

- Repeat the steps in FIGURE 3,4 and Table 4, setting in climate.mod and in plot_reaction:

LIN=1;         

Remind LIN=1; also in optimal_tax (go to line 168), if you set RUN=0;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Figure D3,D4,D5 (Changing Gamma)

- Repeat the steps in Figures 5,6,7 by changing GAM and GAMz (multiply by 10 the baseline values)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Figure D6 (Hand to Mouth)

- Go in Valerio's website https://sites.google.com/site/valerionispi/research
- Open the replication code related to this publication
- Go in the subfolder Code HtM and Repeat the steps for Figures 5-6-7

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Table D4, Figure D7 (High damage)

- Repeat the steps in FIGURE 3,4 and Table 4, setting in climate.mod and in plot_reaction:

DAM=1;

And in console:

kappaX=10*(5.3*10^(-5)*(1+psiX)*(xGtC-xbar)^(-psiX))/(n+(1-n)*eme_factor_dis); 

Remind DAM=1; also in optimal_tax (go to line 168), if you set RUN=0;




